/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.sistemas.postgrado.samupg.view.controller;

import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import org.springframework.stereotype.Controller;
import pe.edu.sistemas.postgrado.samupg.business.service.admision.UsuarioService;
import pe.edu.sistemas.postgrado.samupg.domain.model.Correo;
import pe.edu.sistemas.postgrado.samupg.domain.model.Usuario;

/**
 *
 * @author Almendra
 */
@ManagedBean
@Controller
@RequestScoped
public class UsuarioController {

    @Resource
    private UsuarioService usuarioService;
    private Integer idUsuario;
    private String apepatUsuario;
    private String apematUsuario;
    private String nombreUsuario;
    private String dniUsuario;
    private String telUsuario;
    private String nickUsuario;
    private String passUsuario;
    private String correosIngresados;
    private List<Correo> correoUsuario;
    private String correoDireccion;
    
    public UsuarioController() {
        correoUsuario = new ArrayList<Correo>();
        correosIngresados = "";
    }

    public String saveActionAlumno() {

        String result = null;

        if (getDniUsuario().trim().length() == 0) {
            result = "Debe ingresar su DNI";
        } else {
            if (getDniUsuario().trim().length() != 8) {
                result = "El DNI debe tener exactamente ocho dígitos";
            }
        }

        if (getNombreUsuario().length() > 100) {
            result = "El nombre del interesado no debe exceder los 100 caracteres";
        }

        if (getApepatUsuario().length() > 150) {
            result = "El apellido paterno no debe exceder los 150 caracteres";
        }

        if (getApematUsuario().length() > 150) {
            result = "El apellido materno no debe exceder los 150 caracteres";
        }


        if (result == null) {
            Usuario usuarioLocal = new Usuario();
            usuarioLocal.setUsuDni(dniUsuario);
            usuarioLocal.setUsuApellidoMaterno(apematUsuario);
            usuarioLocal.setUsuApellidoPaterno(apepatUsuario);
            usuarioLocal.setUsuNombres(nombreUsuario);
            usuarioLocal.setUsuNick(nickUsuario);
            usuarioLocal.setUsuPass(passUsuario);
            usuarioLocal.setUsuTelefono(telUsuario);
            usuarioLocal.setCorreos(correoUsuario);
            usuarioLocal.setUsuTipo("Alumno");

            result = usuarioService.salvar(usuarioLocal);
        }

        if (result == null) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Success", "Registro Correcto de Usuario"));
        } else {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Error",
                    "No se pudo registrar el usuario. Error encontrado: " + result));
        }

        limpiarDatos();

        return "";
    }

    private void limpiarDatos() {
    }

    public String loginAction() {
        Usuario usuarioLocal = null;
        String result = null;
        if (getNickUsuario().length() > 45) {
            result = "El nombre del interesado no debe exceder los 100 caracteres";
        }

        if (getPassUsuario().length() > 45) {
            result = "El apellido paterno no debe exceder los 150 caracteres";
        }


        if (result == null) {
            usuarioLocal = new Usuario();
            usuarioLocal.setUsuNick(nickUsuario);
            usuarioLocal.setUsuPass(passUsuario);
            usuarioLocal = usuarioService.Validar(usuarioLocal);
        }

        if (usuarioLocal != null) {
            if (usuarioLocal.getUsuTipo().equalsIgnoreCase("ROLE_ALUMNO")) {
                result = "/interesado/interesadoInicio.jsf?faces-redirect=true;";
            } else {
                result = "/director/directorPrincipal.jsf?faces-redirect=true;";
            }
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Bienvenido", ""));
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("usuarioLogueado", usuarioLocal);
        } else {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Datos incorrectos. Vuelve a intentar",
                    "Error encontrado"));
            return null;
        }
        return result;
    }

    /**
     * @return the idInteresado
     */
    public Integer getIdUsuario() {
        return idUsuario;
    }

    /**
     * @param idInteresado the idInteresado to set
     */
    public void setIdUsuario(Integer idUsuario) {
        this.idUsuario = idUsuario;
    }

    /**
     * @return the apepatInteresado
     */
    public String getApepatUsuario() {
        return apepatUsuario;
    }

    /**
     * @param apepatInteresado the apepatInteresado to set
     */
    public void setApepatUsuario(String apepatUsuario) {
        this.apepatUsuario = apepatUsuario;
    }

    /**
     * @return the apematInteresado
     */
    public String getApematUsuario() {
        return apematUsuario;
    }

    /**
     * @param apematUsurio the apematInteresado to set
     */
    public void setApematUsuario(String apematUsuario) {
        this.apematUsuario = apematUsuario;
    }

    /**
     * @return the nombreInteresado
     */
    public String getNombreUsuario() {
        return nombreUsuario;
    }

    /**
     * @param nombreUsuario the nombreInteresado to set
     */
    public void setNombreUsuario(String nombreUsuario) {
        this.nombreUsuario = nombreUsuario;
    }

    /**
     * @return the dniInteresado
     */
    public String getDniUsuario() {
        return dniUsuario;
    }

    /**
     * @param dniUsuario the dniInteresado to set
     */
    public void setDniUsuario(String dniUsuario) {
        this.dniUsuario = dniUsuario;
    }

    /**
     * @return the telInteresado
     */
    public String getTelUsuario() {
        return telUsuario;
    }

    /**
     * @param telUsuario the telInteresado to set
     */
    public void setTelUsuario(String telUsuario) {
        this.telUsuario = telUsuario;
    }

    /**
     * @return the nickInteresado
     */
    public String getNickUsuario() {
        return nickUsuario;
    }

    /**
     * @param nickUsuario the nickInteresado to set
     */
    public void setNickUsuario(String nickInteresado) {
        this.nickUsuario = nickInteresado;
    }

    /**
     * @return the passInteresado
     */
    public String getPassUsuario() {
        return passUsuario;
    }

    /**
     * @param passUsuario the passInteresado to set
     */
    public void setPassUsuario(String passUsuario) {
        this.passUsuario = passUsuario;
    }

    /**
     * @return the correoInteresado
     */
    public List<Correo> getCorreoUsuario() {
        return correoUsuario;
    }

    /**
     * @param correoInteresado the correoInteresado to set
     */
    public void setCorreoUsuario(List<Correo> correoUsuario) {
        this.correoUsuario = correoUsuario;
    }

    /**
     * @return the correoDireccion
     */
    public String getCorreoDireccion() {
        return correoDireccion;
    }

    /**
     * @param correoDireccion the correoDireccion to set
     */
    public void setCorreoDireccion(String correoDireccion) {
        this.correoDireccion = correoDireccion;
    }

    public String addCorreo() {
        Correo correoOBJ = new Correo();
        correoOBJ.setCorreoDireccion(correoDireccion);

        if (correoUsuario.add(correoOBJ)) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Correcta Añadidura",
                    "se añadió: " + correoDireccion));
        } else {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "No se añadio", ""));
        }
        //session.setAttribute("listadecorreo", correoInteresado);
        setCorreosIngresados(getCorreosIngresados() + correoDireccion + "; ");
        correoDireccion = "";
        return "";
    }

    /**
     * @return the correosIngresados
     */
    public String getCorreosIngresados() {
        return correosIngresados;
    }

    /**
     * @param correosIngresados the correosIngresados to set
     */
    public void setCorreosIngresados(String correosIngresados) {
        this.correosIngresados = correosIngresados;
    }
}
